#include "node.h"

#ifdef _WIN32
int wmain(int argc, wchar_t* wargv[])
{
    // Convert argv to to UTF8
    char** argv = new char*[argc + 1];
    for (int i = 0; i < argc; i++) {
        // Compute the size of the required buffer
        DWORD size = WideCharToMultiByte(CP_UTF8,
            0,
            wargv[i],
            -1,
            nullptr,
            0,
            nullptr,
            nullptr);
        if (size == 0) {
            // This should never happen.
            fprintf(stderr, "Could not convert arguments to utf8.");
            exit(1);
        }
        // Do the actual conversion
        argv[i] = new char[size];
        DWORD result = WideCharToMultiByte(CP_UTF8,
            0,
            wargv[i],
            -1,
            argv[i],
            size,
            nullptr,
            nullptr);
        if (result == 0) {
            // This should never happen.
            fprintf(stderr, "Could not convert arguments to utf8.");
            exit(1);
        }
    }
    argv[argc] = nullptr;
    // Now that conversion is done, we can finally start.
    return node::Start(argc, argv);
}
#else
// UNIX
int main(int argc, char* argv[])
{
    // Disable stdio buffering, it interacts poorly with printf()
    // calls elsewhere in the program (e.g., any logging from V8.)
    setvbuf(stdout, nullptr, _IONBF, 0);
    setvbuf(stderr, nullptr, _IONBF, 0);
    return node::Start(argc, argv);
}
#endif
